#!/usr/bin/env bash
scriptVersion="1.7"
scriptName="InvalidSeriesAutoCleaner"

#### Import Settings
source /config/extended.conf
#### Import Functions
source /config/extended/functions
#### Create Log File
logfileSetup
#### Check Arr App
getArrAppInfo
verifyApiAccess

verifyConfig () {

  if [ "$enableInvalidSeriesAutoCleaner" != "true" ]; then
	log "Script is not enabled, enable by setting enableInvalidSeriesAutoCleaner to \"true\" by modifying the \"/config/extended.conf\" config file..."
	log "Sleeping (infinity)"
	sleep infinity
  fi

  if [ -z "$invalidSeriesAutoCleanerScriptInterval" ]; then
    invalidSeriesAutoCleanerScriptInterval="1h"
  fi
}


InvalidSeriesAutoCleanerProcess () {
  
  # Get invalid series tvdb id's
  seriesTvdbId="$(curl -s --header "X-Api-Key:"$arrApiKey --request GET  "$arrUrl/api/v3/health" | jq -r '.[] | select(.source=="RemovedSeriesCheck") | select(.type=="error")' | grep "message" | grep -o '[[:digit:]]*')"
  
  if [ -z "$seriesTvdbId" ]; then
    log "No invalid series (tvdbid) reported by Sonarr health check, skipping..."
    return
  fi
  
  # Process each invalid series tvdb id
  for tvdbId in $(echo $seriesTvdbId); do
      seriesData="$(curl -s --header "X-Api-Key:"$arrApiKey --request GET  "$arrUrl/api/v3/series" | jq -r ".[] | select(.tvdbId==$tvdbId)")"
      seriesId="$(echo "$seriesData" | jq -r .id)"
      seriesTitle="$(echo "$seriesData" | jq -r .title)"
      seriesPath="$(echo "$seriesData" | jq -r .path)"
      
      log "$seriesId :: $seriesTitle :: $seriesPath :: Removing and deleting invalid Series (tvdbId: $tvdbId) based on Sonarr Health Check error..."
  
      # Send command to Sonarr to delete series and files
      arrCommand=$(curl -s --header "X-Api-Key:"$arrApiKey --request DELETE "$arrUrl/api/v3/series/$seriesId?deleteFiles=true")
      
  
      # trigger a plex scan to rmeove the deleted series
      folderToScan="$(dirname "$seriesPath")"
      log "Using PlexNotify.bash to update Plex.... ($folderToScan)"
      bash /config/extended/PlexNotify.bash "$folderToScan" "true"
  done
}

for (( ; ; )); do
	let i++
	logfileSetup
 	log "Script starting..."
    	verifyConfig
	getArrAppInfo
	verifyApiAccess
	InvalidSeriesAutoCleanerProcess
	log "Script sleeping for $invalidSeriesAutoCleanerScriptInterval..."
	sleep $invalidSeriesAutoCleanerScriptInterval
done

exit
